/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package AccesoDatos.Persistencia.Manager;

import AccesoDatos.Persistencia.Entidad.ERecomendacion;
import LogicaNegocio.Biblioteca.Recomendacion;
import MainBiblioSoft.BiblioSoft;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.EntityTransaction;
import javax.persistence.PersistenceUnit;

/**
 * Esta clase en java es el gestor de persistencia
 * de objetos Recomendacion en la base de datos BiblioSoft.
 *
 * @author sebaxtian
 * Archivo: ManagerRecomendacion.java
 * @version 1.0
 * Fecha: mar may  4 13:04:11 COT 2010
 */


public class ManagerRecomendacion {

    @PersistenceUnit
    private EntityManagerFactory managerFactory;
    private EntityManager entityManager;

    /**
     * Metodo constructor, crea un gestor para la persistencia de Libro
     * 
     */
    public ManagerRecomendacion() {
        managerFactory = BiblioSoft.managerFactory;
        entityManager = managerFactory.createEntityManager();
    }

    /**
     * Este metodo se encarga de la persistencia en la entidad Recomendacion
     * de un objeto Recomendacion.
     *
     * @param recomendacion
     */
    public void crearRecomendacion(Recomendacion recomendacion) {
        entityManager.clear();
        ERecomendacion entidadRecomendacion = new ERecomendacion();
        entidadRecomendacion.setIdentificacionusuario(recomendacion.getIdentificacionDocente());
        entidadRecomendacion.setTitulo(recomendacion.getTitulo());
        entidadRecomendacion.setEdicion(recomendacion.getEdicion());
        entidadRecomendacion.setEditorial(recomendacion.getEditorial());
        entidadRecomendacion.setFecharecomendacion(recomendacion.getFechaRecomendacion());
        EntityTransaction transaccion = entityManager.getTransaction();
        transaccion.begin();
        entityManager.persist(entidadRecomendacion);
        transaccion.commit();
        entityManager.clear();
    }

    /**
     * Este metodo permite eliminar una recomendacion de la base de datos.
     *
     * @param idRecomendacion
     */
    public void eliminarRecomendacion(int idRecomendacion) {
        entityManager.clear();
        ERecomendacion entidadRecomendacion;
        EntityTransaction transaccion = entityManager.getTransaction();
        transaccion.begin();
        entidadRecomendacion = entityManager.find(ERecomendacion.class, idRecomendacion);
        transaccion.commit();
        if(entidadRecomendacion != null){
            transaccion.begin();
            entityManager.remove(entidadRecomendacion);
            transaccion.commit();
        }
        entityManager.clear();
    }

    /**
     * Este metodo permite actualizar una recomendacion de la base de datos.
     * 
     * @param idRecomendacion
     * @param recomendacion
     */
    public void actualizarRecomendacion(int idRecomendacion, Recomendacion recomendacion) {
        entityManager.clear();
        ERecomendacion entidadRecomendacion;
        EntityTransaction transaccion = entityManager.getTransaction();
        transaccion.begin();
        entidadRecomendacion = entityManager.find(ERecomendacion.class, idRecomendacion);
        transaccion.commit();
        if(entidadRecomendacion != null){
            entidadRecomendacion.setIdentificacionusuario(recomendacion.getIdentificacionDocente());
            entidadRecomendacion.setTitulo(recomendacion.getTitulo());
            entidadRecomendacion.setEdicion(recomendacion.getEdicion());
            entidadRecomendacion.setEditorial(recomendacion.getEditorial());
            entidadRecomendacion.setFecharecomendacion(recomendacion.getFechaRecomendacion());
            transaccion.begin();
            entityManager.merge(entidadRecomendacion);
            transaccion.commit();
        }
        entityManager.clear();
    }

    /**
     * Obtiene una recomendacion de la base de datos.
     *
     * @param idRecomendacion
     * @return recomendacion
     */
    public Recomendacion obtenerRecomendacion(int idRecomendacion) {
        entityManager.clear();
        ERecomendacion entidadRecomendacion;
        Recomendacion recomendacion = null;
        EntityTransaction transaccion = entityManager.getTransaction();
        transaccion.begin();
        entidadRecomendacion = entityManager.find(ERecomendacion.class, idRecomendacion);
        transaccion.commit();
        if(entidadRecomendacion != null){
            recomendacion = new Recomendacion();
            recomendacion.setIdRecomendacion(entidadRecomendacion.getIdrecomendacion());
            recomendacion.setIdentificacionDocente(entidadRecomendacion.getIdentificacionusuario());
            recomendacion.setTitulo(entidadRecomendacion.getTitulo());
            recomendacion.setEdicion(entidadRecomendacion.getEdicion());
            recomendacion.setEditorial(entidadRecomendacion.getEditorial());
            recomendacion.setFechaRecomendacion(entidadRecomendacion.getFecharecomendacion());
        }
        entityManager.clear();
        return recomendacion;
    }
}
